package com.h117121.fashionshop.validator;

import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

import com.h117121.fashionshop.constant.AppConstant;
import com.h117121.fashionshop.core.dom.Account;
import com.h117121.fashionshop.core.tool.Utils;

public class RegisterValidator implements Validator {
	@SuppressWarnings("rawtypes")
	@Override
	public boolean supports(Class clazz) {
		return Account.class.isAssignableFrom(clazz);
	}

	@Override
	public void validate(Object target, Errors errors) {
		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName",
				"required.userName", "Vui lòng nhập tên tài khoản");

		Account account = (Account) target;
		if (!Utils.isNullOrEmpty(account.getUserName())
				&& account.getUserName().length() < AppConstant.MINIMUM_CHARACTER_USERNAME) {
			errors.rejectValue("userName", "tooshort.userName",
					new Object[] { AppConstant.MINIMUM_CHARACTER_USERNAME },
					"Tên đăng nhập tối thiểu phải "
							+ AppConstant.MINIMUM_CHARACTER_USERNAME + " ký tự");
		} else {
			if (!StringUtils
					.containsOnly(account.getUserName(),
							"abcdefghijklmnopqrstuvwxyzABCDEFGHIKLMNOPQRSTUVWXYZ0123456789")) {
				errors.rejectValue("userName", "invalid.userName",
						"Tên đăng nhập chỉ chấp nhận chữ và số");
			}
		}

		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userPassword",
				"required.userPassword", "Vui lòng nhập mật khẩu");
		if (!Utils.isNullOrEmpty(account.getUserPassword())
				&& account.getUserPassword().length() < AppConstant.MINIMUM_CHARACTER_PASSWORD) {
			errors.rejectValue("userPassword", "tooshort.userPassword",
					new Object[] { AppConstant.MINIMUM_CHARACTER_PASSWORD },
					"Mật khẩu tối thiểu phải "
							+ AppConstant.MINIMUM_CHARACTER_PASSWORD + " ký tự");
		} else {
			if (!Utils.isNullOrEmpty(account.getUserPassword())) {
				if (!account.getUserPassword().equals(
						account.getConfirmPassword())) {
					errors.rejectValue("confirmPassword",
							"notmatch.confirmPassword",
							"Mật khẩu bạn nhập không khớp");
				}
			}
		}

		if (account.getBirthday() == null) {
			errors.rejectValue("birthday", "required.birthday",
					"Vui lòng nhập ngày sinh");
		} else {

			if ((System.currentTimeMillis() - account.getBirthday().getTime())
					/ (1000 * 60 * 60 * 24) < 1) {
				errors.rejectValue("birthday", "invalid.birthday",
						"Ngày sinh không hợp lệ");
			}
		}

	}
}
